home *** CD-ROM | disk | FTP | other *** search
- /* FILE: cc.c
- * DATE: 30-Dec-1986
- * AUTHOR: Robert Royar rdroya01@bitnet
- * SYSTEM: Atari ST
- * COMPILER: Alcyon v. 4.14
- * PURPOSE: A simple minded compiler driver, no frills.
- * USAGE: cc filename (no .C extension or path for the filename)
- * DISTRIBUTION: Public Domain. Do with it what you will. Just leave
- * the header intact.
- */
- #include <stdio.h>
- #include <osbind.h>
- #include <ctype.h>
- #include <errno.h>
-
- unsigned long _STKSIZ = 16284; /* keep 16K */
- static char sdir[81] = "E:\\"; /* where the source files are */
- static char include[81] = "D:\\STDLIB.H\\"; /* include files */
- static char tdir[81] = "M:\\"; /* temporary files (all of them) */
- static char bin[81] = "C:\\BIN\\"; /* compiler directory */
- static char symb[81] = "C:\\BIN\\"; /* as68 symbols */
- static char tdrvnm[80] = "M"; /* log into this drive */
- int temdrv;
- static char path[128];
- int exec;
- int curdrv;
- char author[30] = "Robert Royar";
-
- main(argc,argv)
- register int argc;
- char *argv[];
- {
- static char pname[81];
- static char command[81];
-
- if (argc != 2)
- {
- fprintf(stderr,"usage: %s filename",argv[0]);
- exit(-1);
- }
- curdrv = (int)Dgetdrv(); /* 0 = A */
- Dgetpath(path,(1+curdrv)); /* 1 = A */
- if (access("cc.ini",4) != -1)
- if (!inivar())
- exit(-1);
- sprintf(command,"%s%s.c",sdir,argv[1]);
- temdrv = (int)(tdrvnm[0] - 'A');
- Dsetdrv(temdrv); /* Log into temp drive */
- if((exec=(int)Dsetpath(tdir))!=0)
- exit(exec);
- if (access(command,4) == -1)
- exit(EACCES);
- sprintf(&command[1],"-i %s %s%s.c %s%s.i ",
- include,sdir,argv[1],tdir,argv[1]);
- command[0] = (char)strlen(&command[1]);
- sprintf(pname,"%sCP68.PRG",bin);
- if((exec=(int)Pexec(0,pname,command,0L))!=0)
- exit(exec);
- sprintf(&command[1],"%s%s.i %s%s.1 %s%s.2 %s%s.3",
- tdir,argv[1],tdir,argv[1],tdir,argv[1],tdir,argv[1]);
- command[0] = (char)strlen(&command[1]);
- sprintf(pname,"%sC068.PRG",bin);
- if((exec=(int)Pexec(0,pname,command,0L))!=0)
- exit(exec);
- sprintf(command,"%s%s.i",tdir,argv[1]);
- unlink(command);
- sprintf(&command[1],"%s%s.1 %s%s.2 %s%s.s",
- tdir,argv[1],tdir,argv[1],tdir,argv[1]);
- command[0] = (char)strlen(&command[1]);
- sprintf(pname,"%sC168.PRG",bin);
- if((exec=(int)Pexec(0,pname,command,0L))!=0)
- exit(exec);
- sprintf(command,"%s%s.1",tdir,argv[1]);
- unlink(command);
- sprintf(command,"%s%s.2",tdir,argv[1]);
- unlink(command);
- sprintf(&command[1],"-l -u -s %s %s%s.s",bin,tdir,argv[1]);
- command[0] = (char)strlen(&command[1]);
- sprintf(pname,"%sAS68.PRG",bin);
- if((exec=(int)Pexec(0,pname,command,0L))!=0)
- exit(exec);
- sprintf(command,"%s.s",tdir,argv[1]);
- unlink(command);
- Dsetdrv(curdrv);
- Dsetpath(path);
- exit(0);
- }
-
- inivar()
- {
- FILE *freopen();
- char *gets();
- int ln = 0;
- static char line[81];
-
- if (freopen("cc.ini","r",stdin) != stdin)
- {
- fprintf(stderr,"cc: cannot open %scc.ini\n",path);
- return(0);
- }
- while (gets(line))
- {
- switch(ln)
- {
- case 0:
- strncpy(sdir,line,80);
- break;
- case 1:
- strncpy(include,line,80);
- break;
- case 2:
- strncpy(tdir,line,80);
- break;
- case 3:
- strncpy(bin,line,80);
- break;
- case 4:
- strncpy(symb,line,80);
- break;
- case 5:
- strncpy(tdrvnm,line,80);
- break;
- default:
- break;
- }
- ++ln;
- if (feof(stdin))
- break;
- }
- return(1);
- }
-